package py.com.erpone.session.dm.list;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import py.com.erpone.entity.almacen.Lote;
import py.com.erpone.entity.dm.Ciudad;
import py.com.erpone.entity.dm.Presentacion;
import py.com.erpone.entity.dm.SolicitudCotizacion;
import py.com.erpone.entity.dm.SolicitudPedido;
import py.com.erpone.entity.dm.SolicitudPedido;
import py.com.erpone.entity.dm.SolicitudPedidoDetalle;
import py.com.erpone.util.LocaleSelector;



@Stateless
@LocalBean
@Named
public class SolicitudPedidoList {
	
	@PersistenceContext
	private EntityManager em;
	LocaleSelector localeSelector;

	
	@SuppressWarnings("unchecked")
	public List<SolicitudPedido> findAll(){
		List<SolicitudPedido> result=(List<SolicitudPedido>)em.createNamedQuery("solicitudPedidoCabecera.all").getResultList();
		for (SolicitudPedido sp : result) {
			if(sp !=null && !sp.getSituacion().trim().isEmpty()){
				sp.setSituacionExtenso(this.getSituacionExtenso(sp.getSituacion(), sp.getListSituacion()));
			}
		}
		return result;
	}
	public String getSituacionExtenso(String key, HashMap<String, String> listSituacion) {
		localeSelector = new LocaleSelector();
		String retorno = key;
		Map<String, String> map = listSituacion;
		for (Map.Entry<String, String> entry : map.entrySet()){
			if(key.equals(entry.getValue())){
				return localeSelector.getMensaje("situacion."+entry.getKey());
			}
		}		
		return retorno;
	}
	@SuppressWarnings("unchecked")
	public List<SolicitudPedido> findAllAdjudicados(){
		List<SolicitudPedido> result=(List<SolicitudPedido>)em.createNamedQuery("solicitudPedidoCabeceraAdjudicados.all").getResultList();
		for (SolicitudPedido sp : result) {
			if(sp !=null && !sp.getSituacion().trim().isEmpty()){
				sp.setSituacionExtenso(this.getSituacionExtenso(sp.getSituacion(), sp.getListSituacion()));
			}
		}
		return result;
	}
	@SuppressWarnings("unchecked")
	public List<SolicitudPedidoDetalle> findAllDetallesByCotizacion(Long id){
		
		String sql = "select spd.producto_id,spd.solicitudPedido_id, p.id,p.nombre, spd.cantidad, spd.precioUnitario, spd.subtotal  " +
				"from solicitudcotizacion sc  " +
				"join solicitudPedidoDetalle spd on (sc.solicitudPedido_id= spd.solicitudPedido_id) " +
				"join producto p on (spd.producto_id = p.id) where sc.id = ?;";

	Query query = em.createNativeQuery(sql, SolicitudPedidoDetalle.class);
	query.setParameter(1, id);
	List<SolicitudPedidoDetalle> result = query.getResultList();
	return result;
}
	@SuppressWarnings("unchecked")
	public List<SolicitudPedidoDetalle> findAllDetallesByCotiza(){
		
		String sql = "select * " +
				"from solicitudcotizacion sc  " +
				"join solicitudPedidoDetalle spd on (sc.solicitudPedido_id= spd.solicitudPedido_id) " +
				"join producto p on (spd.producto_id = p.id) where sc.id = 1;";

	Query query = em.createNativeQuery(sql, SolicitudPedidoDetalle.class);
	List<SolicitudPedidoDetalle> result = query.getResultList();
	return result;
}	
	@SuppressWarnings("unchecked")
	public List<SolicitudPedido> findAllProveedores(){

		/*		return (List<Presentacion>) em.createNamedQuery("Presentacion.presentaciones")
		                .setParameter("id", id)
		                .getResultList();*/
				String sql = " select p.* " +
							 " from SolicitudPedido_proveedor b " +
							 " join SolicitudPedido p on b.SolicitudPedido_id = p.id";

				Query query = em.createNativeQuery(sql, SolicitudPedido.class);
				List<SolicitudPedido> result = query.getResultList();
				return result;
			}

	public SolicitudPedido findById(Long id){
		return em.find(SolicitudPedido.class, id);
	}
}
